﻿using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using VaccinationHost.Model.ApiArgs;
using VaccinationHost.Model.Dto;
using VaccinationHost.Services;

namespace VaccinationHost.Controllers
{
    /// <summary>
    /// 用户控制器
    /// </summary>
    [Route("api/v1/user")]
    [ApiController]
    public class UserController : ControllerBase
    {
        private IUserService _userService;
        private IJWTService _jWTService;

        public UserController(IUserService userService, IJWTService jWTService)
        {
            _userService = userService;
            _jWTService = jWTService;
        }

        [Route("auth/{openId}/{username}")]
        [HttpPost]
        public async Task<ActionResult<string>> Auth(string openId, string username)
        {

            var currentUser = await _userService.CurrentUserAsync(openId);
            if (currentUser != null)
            {
                var token = _jWTService.GetToken(openId, currentUser.Id, currentUser.UserName);
                return Ok(token);
            }
            else
            {
                var result = await this._userService.Register(openId, username);
                if (result.Code == 200)
                {
                    var user = result.Data as UserDto;
                    var token = _jWTService.GetToken(openId, user.Id, user.UserName);
                    return Ok(token);
                }
                else
                {
                    return BadRequest(result);
                }
            }
        }
        ///// <summary>
        ///// 用户注册
        ///// </summary>
        ///// <param name="args"></param>
        ///// <returns></returns>
        //[HttpPost(Name ="register")]
        //public async Task<ActionResult> Register(UserRegisterArgs args)
        //{
        //    var result = await this._userService.Register(args.OpenId, args.Name);
        //    if (result.Code == 200)
        //    {
        //        var user = result.Data as UserDto;
        //        var token = _jWTService.GetToken(args.OpenId, user.Id, user.UserName);
        //        return Ok(token);
        //    }
        //    else
        //    {
        //        return BadRequest(result);
        //    }
        //}
    }
}
